package com.ktjy.ruoyimes.md.service.impl;

import java.util.List;
import com.ruoyi.common.utils.DateUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import com.ktjy.ruoyimes.md.mapper.MdItemTypeMapper;
import com.ktjy.ruoyimes.md.domain.MdItemType;
import com.ktjy.ruoyimes.md.service.IMdItemTypeService;

/**
 * 物料产品分类Service业务层处理
 *
 * @author ruoyi
 * @date 2025-05-07
 */
@Service
public class MdItemTypeServiceImpl implements IMdItemTypeService {
    @Autowired
    private MdItemTypeMapper mdItemTypeMapper;

    /**
     * 查询物料产品分类
     *
     * @param itemTypeId 物料产品分类主键
     * @return 物料产品分类
     */
    @Override
    public MdItemType selectMdItemTypeByItemTypeId(Long itemTypeId) {
        return mdItemTypeMapper.selectMdItemTypeByItemTypeId(itemTypeId);
    }

    /**
     * 查询物料产品分类列表
     *
     * @param mdItemType 物料产品分类
     * @return 物料产品分类
     */
    @Override
    public List<MdItemType> selectMdItemTypeList(MdItemType mdItemType) {
        return mdItemTypeMapper.selectMdItemTypeList(mdItemType);
    }

    /**
     * 新增物料产品分类
     *
     * @param mdItemType 物料产品分类
     * @return 结果
     */
    @Override
    public int insertMdItemType(MdItemType mdItemType) {
        // 自动生成编码
        if (mdItemType.getItemTypeCode() == null || mdItemType.getItemTypeCode().isEmpty()) {
            mdItemType.setItemTypeCode(generateItemTypeCode());
        }

        // 设置创建时间
        mdItemType.setCreateTime(DateUtils.getNowDate());

        // 自动生成祖先路径
        if (mdItemType.getParentTypeId() != null && mdItemType.getParentTypeId() != 0) {
            String ancestors = buildAncestors(mdItemType.getParentTypeId());
            mdItemType.setAncestors(ancestors);
        } else {
            // 根节点的祖先路径
            mdItemType.setAncestors("0");
        }

        return mdItemTypeMapper.insertMdItemType(mdItemType);
    }

    /**
     * 修改物料产品分类
     *
     * @param mdItemType 物料产品分类
     * @return 结果
     */
    @Override
    public int updateMdItemType(MdItemType mdItemType) {
        mdItemType.setUpdateTime(DateUtils.getNowDate());
        return mdItemTypeMapper.updateMdItemType(mdItemType);
    }

    /**
     * 批量删除物料产品分类
     *
     * @param itemTypeIds 需要删除的物料产品分类主键
     * @return 结果
     */
    @Override
    public int deleteMdItemTypeByItemTypeIds(Long[] itemTypeIds) {
        return mdItemTypeMapper.deleteMdItemTypeByItemTypeIds(itemTypeIds);
    }

    /**
     * 删除物料产品分类信息
     *
     * @param itemTypeId 物料产品分类主键
     * @return 结果
     */
    @Override
    public int deleteMdItemTypeByItemTypeId(Long itemTypeId) {
        return mdItemTypeMapper.deleteMdItemTypeByItemTypeId(itemTypeId);
    }

    /**
     * 生成物料类型编码
     * @return 生成的编码
     */
    private String generateItemTypeCode() {
        // 这里实现你的编码生成逻辑
        // 示例：使用时间戳+随机数
        return "IT" + System.currentTimeMillis() + (int)(Math.random() * 1000);
    }

    /**
     * 构建祖先路径
     * @param parentId 父级ID
     * @return 祖先路径字符串
     */
    private String buildAncestors(Long parentId) {
        // 查询父级记录
        MdItemType parent = mdItemTypeMapper.selectMdItemTypeByItemTypeId(parentId);
        if (parent != null) {
            // 如果父级有祖先路径，则追加当前父级ID
            // 如果没有，则只使用父级ID
            return (parent.getAncestors() != null && !parent.getAncestors().isEmpty())
                    ? parent.getAncestors() + "," + parentId
                    : parentId.toString();
        }
        return parentId.toString();
    }
}